NDK 交叉编译工具链使用 |
您所在的位置:网站首页 › ndk 编译 apk › NDK 交叉编译工具链使用 |
NDK 已经为我们提供了交叉编译工具链,用来编译第三方 C/C++ 库到 Android 中使用,比如 FFmpeg、x264、RTMPDump 等等。如何使用 ndk 工具也看个人兴趣,你可以通过下载好 ndk 工具后,通过指定工具链路径来完成。也可以使用 ndk 提供的 make_standalone_toolchain.py 脚本来生成我们想要的工具链,这个好处是它会将你要想要的工具都拷贝到指定目录,比较方便查找。 NDK 目录介绍首先我们下载 android-ndk-r17c 目录,没有的可到官网下载。截图如下: ![]() 我们在使用交叉编译工具链的时候都用到 toolchains、sysroot、platforms。 toolchains ,一看名字就知道这个是关于编译工具链的。它针对不同 cpu 架构都提供了编译工具链。 ![]() 值得说明的是,在 ndk-r18 就不再支持 mips 架构了。你要编译 arm 架构,你可以选择 32 位的 arm-linux-androideabi-4.9 或者 64 位的 aarch64-linux-android-4.9,目前主流手机 cpu 已经慢慢向 64 位慢进了,并且在新版本的 Android Studio3.5 中也会提示你最好包含 armeabi-v7a 和 arm64-v8a,如果你不加入 64 位支持,你的应用就没办法通过谷歌应用市场审核, 有图作证。 ![]() 这里选择 arm-linux-androideabi-4.9 进入 ![]() 很多人在网上拿着别人的配置就一通编译,也不看看别人是什么平台,有的人是 Mac OS 有的是 Linux,所以要注意一下这里的使用啦!继续跟进去看看 ![]() 进入到这个目录下,也就是我们需要的所有交叉编译工具啦! 现在来看 platforms 目录 ![]() 这里列出了 Android 各平台需要依赖的的库,随便选择一个进入。 ![]() 从上面列表看到 libc、libz、libandroid、libOpenSLES 等等,这些就是系统提供给我们的库。或许大家没有用过, 不过在 NDK 开发或多或少都会用到的。 在比较老的 ndk 版本没有 sysroot 目录,这个目录存放的是系统库依赖的头文件,而老的版本则是在各平台下 usr 目录下有 include 目录。到后面比较新的版本就移到了 sysroot。具体是哪一个版本我也记不清了,读者可以自行求证。 ![]() 选择 include 目录进入,如下列出了系统库需要头文件。 ![]() NDK 为我们提供了 make_standalone_toolchain.py 脚本来生成编译工具链。它的目录在 build/tools/ 下,使用也比较简单 --arch 指定 cpu 架构 --api 指定系统版本 --install-dir 生成的编译工具链目录 $NDK/build/tools/make_standalone_toolchain.py \ --arch arm --api 21 --install-dir /tmp/my-android-toolchain下面我生成了一个,我们看看它的文件结构。 ![]() 你可以看到已经为我们生成了 arm-linux-androideabi, 在 sysroot 下包含了系统提供的库以及头文件。在 bin 目录下包含了交叉编译工具,比如 clang、gcc、ar、as、nm、strip 等等。主要做的工作就是将原先在 ndk 目录下的各目录结构归纳到一个目录。 具体的目录拷贝过程: 1. $NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/* -> 工具链安装目录/ 2.$NDK/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib -> 工具链安装目录/sysroot/usr/特别提醒: 在 NDK 19 开始就不需要使用独立工具链了, 在 toolchains/llvm/ 下已经提供好了编译工具, 读者自行去下载进入目录看看,和独立工具链编译出来的结构非常类似,不过它比较全的是针对不同平台版本 好了,现在就已经介绍完了 NDK 提供的交叉编译工具。知道了原理后,读者可以尝试去编译下第三方 C/C++ 库的来练练手。比如 x264。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |